﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using DataTier.Repository;
using Common;
using DataTier;

namespace DataServices
{
    [ServiceBehavior(Namespace = WCFSettings.Namespace)]
    public class PromptMessagesService : IPromptMessagesService
    {
        /// <summary>
        /// Возвращает перечень подсказок для конкретной страницы
        /// </summary>
        /// <param name="namePage"></param>
        /// <returns></returns>
        public string[] GetPromptMessages(string namePage)
        {
            try
            {
                string[] messages = new PromptMessageRepository().GetPromptMessages(namePage);
                return messages;
            }
            catch (Exception ex)
            {
                new Logger().LogException(ex);
                //return null;
                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex), "Произошла ошибка при попытке получить подсказку из базы данных.");
            }
        }


        /// <summary>
        /// Возвращает перечень подсказок для конкретной страницы
        /// </summary>
        /// <param name="namePage"></param>
        /// <returns></returns>
        public List<PromptingMessage> GetPromptMessageList(string namePage)
        {
            try
            {
                var messages = new PromptMessageRepository().GetPromptMessageList(namePage);
                return messages;
            }
            catch (Exception ex)
            {
                new Logger().LogException(ex);
                //return null;
                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex), "Произошла ошибка при попытке получить подсказку из базы данных.");
            }
        }

        
        /// <summary>
        /// Возвращает конкретное кообщение по его идентификатору
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="messageId"></param>
        /// <returns></returns>
        public PromptingMessage GetPromptMessage(int currentUserId, int messageId)
        {
            try
            {
                var message = new PromptMessageRepository().GetPromptMessage(currentUserId, messageId);
                return message;
            }
            catch (Exception ex)
            {
                new Logger().LogException(ex);
                //return null;
                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex), "Произошла ошибка при попытке получить подсказку из базы данных.");
            }
        }


        /// <summary>
        /// Сохранение сообщения-подсказки
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public int SavePromptMessage(int currentUserId, PromptingMessage message)
        {
            try
            {
                int id = new PromptMessageRepository().SavePromptMessage(currentUserId, message);
                return id;
            }
            catch (Exception ex)
            {
                new Logger().LogException(ex);
                //return null;
                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex), "Произошла ошибка при попытке сохранить подсказку в базе данных.");
            }
        }


        /// <summary>
        /// Удаление сообщения-подсказки
        /// </summary>
        /// <param name="currentUserId"></param>
        /// <param name="messageId"></param>
        public void DeletePromptMessage(int currentUserId, int messageId)
        {
            try
            {
                new PromptMessageRepository().DeletePromptMessage(currentUserId, messageId);
            }
            catch (Exception ex)
            {
                new Logger().LogException(ex);
                throw new FaultException<ExceptionDetail>(new ExceptionDetail(ex), "Произошла ошибка при попытке удалить подсказку из базы данных.");
            }
        }

    }
}
